package cn.csc.module.shoppingCard.dal.dataobject.card;

import cn.csc.framework.mybatis.core.dataobject.BaseDO;
import cn.csc.framework.mybatis.core.type.EncryptTypeHandler;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDateTime;

/**
 * 购物卡主表 DO
 * password字段设置了typeHandler，必须设置autoResultMap = true，否则typeHandler不会生效
 * @author liuchuang
 */
@TableName(value = "card", autoResultMap = true)
@KeySequence("card_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CardDO extends BaseDO {

    /**
     * 主键id
     */
    @TableId
    private BigInteger id;
    /**
     * 项目ID
     */
    private BigInteger projectId;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 卡号
     */
    private String cardNumber;
    /**
     * 绑定的用户ID
     */
    private BigInteger userId;
    /**
     * 用户手机号
     */
    private String userPhone;
    /**
     * 面值
     */
    private BigDecimal faceValue;
    /**
     * 当前余额
     */
    private BigDecimal balance;
    /**
     * 使用限制
     */
    private String restriction;
    /**
     * 使用说明
     */
    private String comment;
    /**
     * 状态(0-无效，1-有效)
     */
    private Byte status;
    /**
     * 加密后的购物卡密码（AES对称加密）
     */
    @TableField(typeHandler = EncryptTypeHandler.class)
    private String password;
    /**
     * 有效期
     */
    private LocalDateTime expireTime;
    /**
     * 发卡（激活）时间
     */
    private LocalDateTime activatedAt;
    /**
     * 锁定的订单ID
     */
    private BigInteger lockOrder;

}
